using System;  // 引用系统命名空间
using System.Collections;  // 引用集合相关命名空间
using System.Collections.Generic;  // 引用泛型集合命名空间
using UnityEngine;  // 引用Unity引擎的核心功能

public class VoiceInputs : MonoBehaviour
{
    /// <summary>
    /// 录音时长，单位为秒
    /// </summary>
    public int m_RecordingLength = 5;  // 定义录音时长，默认为5秒

    public AudioClip recording;  // 存储录音后的音频剪辑

    /// <summary>
    /// WebGL平台下的信号管理器
    /// </summary>
    [SerializeField] private SignalManager signalManager;  // 引用SignalManager，用于WebGL平台上的信号绑定

    /// <summary>
    /// 启动录音
    /// </summary>
    public void StartRecordAudio()
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        // 如果是在WebGL平台且不是在编辑器中，使用SignalManager来开始录音
        signalManager.onAudioClipDone = null;  // 清空上一次的回调
        signalManager.StartRecordBinding();  // 开始信号绑定来进行录音
#else
        // 在其他平台（如PC）上，使用麦克风录音
        recording = Microphone.Start(null, false, m_RecordingLength, 16000);  // 启动麦克风录音，设置录音时长和采样率
#endif
    }

    /// <summary>
    /// 停止录音并返回录音结果
    /// </summary>
    /// <param name="_callback"></param>
    public void StopRecordAudio(Action<AudioClip> _callback)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        // 如果是在WebGL平台且不是在编辑器中，使用SignalManager来停止录音
        signalManager.onAudioClipDone += _callback;  // 将回调传递给信号管理器
        signalManager.StopRecordBinding();  // 停止信号绑定的录音
#else
        // 在其他平台（如PC）上，使用麦克风停止录音
        Microphone.End(null);  // 结束麦克风录音
        _callback(recording);  // 调用回调函数，返回录音的音频剪辑
#endif
    }
}